--- a/extensions/LUA/Kbuild
+++ b/extensions/LUA/Kbuild
@@ -22,6 +22,8 @@ xt_LUA-y += nf_lua.o \
 			prot_buf_dynamic.o \
 
 
+# Enable <stddef.h> <stdarg.h>
+EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
 # Adding Lua Support
 EXTRA_CFLAGS += -I$(src)/lua -I$(src)/lua/include 
 xt_LUA-y += lua/lapi.o \
--- a/extensions/LUA/xt_LUA_target.c
+++ b/extensions/LUA/xt_LUA_target.c
@@ -19,7 +19,7 @@
 #include <linux/kernel.h>
 #include <linux/slab.h>
 #include <linux/module.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
 #include <net/ip.h>
 #include <linux/netfilter/x_tables.h>
 #include "xt_LUA.h"
@@ -64,10 +64,10 @@ uint32_t  lua_state_refs[LUA_STATE_ARRAY
  * XT_CONTINUE inside the *register_lua_packet_lib* function.
  */
 
-spinlock_t lock = SPIN_LOCK_UNLOCKED;
+DEFINE_SPINLOCK(lock);
 
 static uint32_t 
-lua_tg(struct sk_buff *pskb, const struct xt_target_param *par)
+lua_tg(struct sk_buff *pskb, const struct xt_action_param *par)
 {
 	uint32_t  verdict;
 	lua_packet_segment *p;
@@ -79,7 +79,7 @@ lua_tg(struct sk_buff *pskb, const struc
 
 	L = lua_envs[info->state_id]->L;
 
-	if (!skb_make_writable(pskb, pskb->len))
+	if (skb_ensure_writable(pskb, pskb->len))
 		return NF_DROP;
 
 	/* call the function provided by --function parameter or the default 'process_packet' defined in Lua */
@@ -88,11 +88,11 @@ lua_tg(struct sk_buff *pskb, const struc
 	/* push the lua_packet_segment as a parameter */
 	p = (lua_packet_segment *)lua_newuserdata(L, sizeof(lua_packet_segment));
 	if (pskb->mac_header)
-		p->start = pskb->mac_header;
+		p->start = skb_mac_header(pskb);
 	else if (pskb->network_header)
-		p->start = pskb->network_header;
+		p->start = skb_network_header(pskb);
 	else if (pskb->transport_header)
-		p->start = pskb->transport_header;
+		p->start = skb_transport_header(pskb);
 	p->offset = 0;
 	p->length = (unsigned long)pskb->tail - (unsigned long)p->start;
 	p->changes = NULL;
@@ -208,16 +208,16 @@ static bool load_script_into_state(uint3
  * some workqueue initialization. So far this is done each time this function
  * is called, subject to change.
  */
-static bool
+static int
 lua_tg_checkentry(const struct xt_tgchk_param *par)
 {
 	const struct xt_lua_tginfo *info = par->targinfo;
 
 	if (load_script_into_state(info->state_id, info->script_size, (char *)info->buf)) {
 		lua_state_refs[info->state_id]++;
-		return true;
+		return 0;
 	}
-	return false;
+	return -EINVAL;
 }
 
 /*::*
--- a/extensions/LUA/lua/llimits.h
+++ b/extensions/LUA/lua/llimits.h
@@ -8,7 +8,6 @@
 #define llimits_h
 
 #include <stddef.h>
-#include <limits.h>
 
 #include "lua.h"
 
--- a/extensions/LUA/lua/lapi.c
+++ b/extensions/LUA/lua/lapi.c
@@ -4,9 +4,6 @@
 ** See Copyright Notice in lua.h
 */
 
-#include <stdarg.h>
-#include <math.h>
-#include <assert.h>
 #include <string.h>
 
 #define lapi_c
--- a/extensions/LUA/lua/ltable.c
+++ b/extensions/LUA/lua/ltable.c
@@ -18,7 +18,6 @@
 ** Hence even when the load factor reaches 100%, performance remains good.
 */
 
-#include <math.h>
 #include <string.h>
 
 #define ltable_c
--- a/extensions/LUA/lua/luaconf.h
+++ b/extensions/LUA/lua/luaconf.h
@@ -13,8 +13,12 @@
 #if !defined(__KERNEL__)
 #include <limits.h>
 #else
+#include <linux/kernel.h>
+
+#undef UCHAR_MAX
+#undef BUFSIZ
+#undef NO_FPU
 #define UCHAR_MAX	255
-#define SHRT_MAX        32767
 #define BUFSIZ 		8192
 #define NO_FPU
 #endif
@@ -637,6 +641,8 @@ union luai_Cast { double l_d; long l_l;
 */
 #if defined(__KERNEL__)
 #undef LUA_USE_ULONGJMP
+#define setjmp __builtin_setjmp
+#define longjmp __builtin_longjmp
 #endif
 
 #if defined(__cplusplus)
--- a/extensions/LUA/lua/llex.h
+++ b/extensions/LUA/lua/llex.h
@@ -10,6 +10,8 @@
 #include "lobject.h"
 #include "lzio.h"
 
+/* prevent conflict with definition from asm/current.h */
+#undef current
 
 #define FIRST_RESERVED	257
 
